
//泛型指定义函数接口或类的时候，我们没有去指定具体的类型等到我们使用的时候再去指定具体类型的这样一种特征，以函数为例，泛型就是声明这个函数时我们不去指定具体的类型，等到我们再调用它的时候再去传递一个具体的类型，是为了极大程度的复用我们的代码

export {}
// 创建一个数字类型数组
function createNumberArray(length:number,value:number): number[]{
    const arr = Array<number>(length).fill(value)//通过Array对象创建一个指定长度的空数组，在通过fill方法填充每一个值，Array对象默认创建的是any类型数组，所以要指定下里面的类型用泛型参数<number> 指定为数字类型的数组
    return arr
}
//创建一个string类型数组
function createStringArray(length:number,value:string): string[]{
    const arr = Array<string>(length).fill(value)
    return arr
}

function createArray<T>(length:number,value:T): T[]{//在函数名后面使用一对尖括号，在尖括号里面定义泛型参数，一般用T表示，然后把函数当中不明确的类型用T表示
    const arr = Array<T>(length).fill(value)
    return arr
}

const res = createArray<string>(3,'foo')//创建一个string类型数组
//泛型就是把我们定义时不能够明确的类型变成一个参数，让我在使用的时候再传递这样的一个类型参数